# -*- coding:utf-8 -*-

"""
对小程序获取的数据解密
"""
import base64
from Crypto.Cipher import AES
from .. helper import md5_constructor as md5

class WXBizDataCrypt:
    def pay_refund_decrypt(self, encrypted_data, partner_key):
        '''
        aes decode
        将退款结果通知加密后的加密信息解密
        解密步骤如下：
        （1）对加密串A做base64解码，得到加密串B
        （2）对商户key做md5，得到32位小写key* ( key设置路径：微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )
        （3）用key*对加密串B做AES-256-ECB解密（PKCS7Padding）
        @param encrypted_data: 包括敏感数据在内的完整用户信息的加密数据
        @return: 解密后数据
        '''
        encrypted_data = base64.b64decode(encrypted_data)
        partner_key = md5(partner_key.encode(encoding='utf-8')).hexdigest().lower()
        cipher = AES.new(str.encode(partner_key), AES.MODE_ECB)
        encrypted_str = bytes.decode(self._unpad(cipher.decrypt(encrypted_data)))
        return encrypted_str

    def _unpad(self, s):
        return s[:-ord(s[len(s)-1:])]
